package com.hmx.openplatform.gateway.listener;


import com.hmx.openplatform.commons.constans.SystemParams;
import com.hmx.openplatform.gateway.feign.CacheService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;


/**
 * 当前类的作用是在程序启动的时候从缓存中查询所有的和路由信息相关的数据
 */
@Component
public class InitApiRouting {
    @Autowired
    private CacheService cacheService;

    public static final Map<String, Map<Object, Object>> API_ROUTING_MAP_CACHE = new ConcurrentHashMap<>();


    @PostConstruct //这个注解是spring创建对象之后执行的
    public void init() {
        //从redis中查询数据并保存到本地
        try {
            Set<String> allKeys = cacheService.findKeyByPartten("APINAME:*");
            System.err.println("redis中所有和路由相关信息的key:" + allKeys);
            //把每个数据取出来然后保存起来
            //保存在哪?怎么保存,因为我们保存的目的是用于查询,所以后面如何查询,我们需要考虑好
            //我们保存的数据是一个路由信息的数据,是一个map.但是我们有很多路由信息,应该是用一个集合来保存
            //不能使用list,因为找的时候不好找,使用map来访,key就是method的值,value就是对应的信息map
            if (allKeys != null) {
                for (String key : allKeys) {
                    Map<Object, Object> ApiInfoMap = cacheService.hGetAll( key); //注意这个key已经包含了前缀
                    API_ROUTING_MAP_CACHE.put(key, ApiInfoMap);//保存信息
                }
            }
            System.err.println(API_ROUTING_MAP_CACHE);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
